package com.br.negocio.web.backbean;

import java.io.Serializable;

import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.br.negocio.controller.ControllerModelo;
import com.br.negocio.vo.MarcaVO;
import com.br.negocio.vo.ModeloVO;
import com.br.negocio.web.formbean.ModeloFormBean;

@Controller("modeloBackBean")
@Scope("session")
public class ModeloBackBean implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Resource
	private ControllerModelo controllerModelo;
	
	private ModeloFormBean modeloFormBean;

	public ModeloBackBean() {
		super();
		this.modeloFormBean = new ModeloFormBean();
	}

	public ModeloFormBean getModeloFormBean() {
		return this.modeloFormBean;
	}

	public void setModeloFormBean(ModeloFormBean modeloFormBean) {
		this.modeloFormBean = modeloFormBean;
	}
	
	// M�TODOS

	public void obterListaModelo() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			this.modeloFormBean.setListaModelo(this.controllerModelo.obterListaModelo());
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Erro ao obter a lista de modelo: " + e.getMessage()));
		}
	}
	
	public void manterModelo() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			this.modeloFormBean.getModeloManter().setMarcaVO(this.getModeloFormBean().getMarcaManter());
			this.controllerModelo.atualizarModelo(this.modeloFormBean.getModeloManter());
			this.modeloFormBean.setIsDisabled(true);
			context.addMessage(null, new FacesMessage("Sucesso: Inser��o realizada com sucesso!"));
		} catch (Exception e) {
			context.addMessage(null , new FacesMessage("Erro ao manter o modelo: " + e.getMessage()));
		}
		
	}
	
	public void excluirModelo() {
		FacesContext context = FacesContext.getCurrentInstance();
		
		try {
			if (this.getModeloFormBean().getModeloManter().getCodigo() != 0) {
				this.controllerModelo.removerModelo(this.modeloFormBean.getModeloManter());
				if (!this.modeloFormBean.getListaModelo().isEmpty()) {
					this.modeloFormBean.setListaModelo(this.controllerModelo.obterListaModelo());
				}
				this.modeloFormBean.setModeloManter(new ModeloVO());
				context.addMessage(null, new FacesMessage("Sucesso: Modelo exclu�do com sucesso!"));
			}
		} catch (Exception e) {
			context.addMessage(null, new FacesMessage("Erro ao excluir o modelo: " + e.getMessage()));
		}
	}
	
	// LISTENERS
	
	public void listenerIrInserirModelo(ActionEvent evento) {
		this.modeloFormBean.setMarcaManter(new MarcaVO());
		this.modeloFormBean.setModeloManter(new ModeloVO());
		this.modeloFormBean.setIsDisabled(false);
		this.modeloFormBean.setHead("Cadastrar Modelo");
	}
	
	public void listenerIrExcluirModelo(ActionEvent evento) {
		UIParameter comp = (UIParameter) evento.getComponent().findComponent("codigoModeloExcluir");
		int codigo = Integer.valueOf((Integer)comp.getValue());
		
		if (codigo != 0) {
			ModeloVO modeloVO = new ModeloVO();
			modeloVO.setCodigo(codigo);
			this.modeloFormBean.setModeloManter(this.controllerModelo.obterModelo(modeloVO));
			this.modeloFormBean.setMarcaManter(this.modeloFormBean.getModeloManter().getMarcaVO());
		}
		this.modeloFormBean.setHead("Excluir Modelo");
		this.modeloFormBean.setIsDisabled(true);
	}
	
	public void listenerIrEditarModelo(ActionEvent evento) {
		UIParameter comp = (UIParameter) evento.getComponent().findComponent("codigoModeloEditar");
		int codigo = Integer.valueOf((Integer)comp.getValue());
		
		if (codigo != 0) {
			ModeloVO modeloVO = new ModeloVO();
			modeloVO.setCodigo(codigo);
			this.modeloFormBean.setModeloManter(this.controllerModelo.obterModelo(modeloVO));
			this.modeloFormBean.setMarcaManter(this.modeloFormBean.getModeloManter().getMarcaVO());
		}
		this.modeloFormBean.setHead("Editar Modelo");
		this.modeloFormBean.setIsDisabled(false);
	}

}